{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "<h1> 第二讲 程序设计基础</h1>\n",
    "<a id=backup></a>\n",
    "<H2>目录</H2>  \n",
    "\n",
    "[2.1 程序执行过程](#Section1)  \n",
    "[2.2 程序实例](#Section2)  \n",
    "[2.3 程序的基本结构](#Section3)     \n",
    "[2.4 顺序结构](#Section4)  \n",
    "[2.5 分支结构](#Section5)  \n",
    "[2.6 循环结构](#Section6) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "numpy             2.1.3\n",
      "Collecting dot\n",
      "  Downloading dot-0.3.0-py3-none-any.whl.metadata (359 bytes)\n",
      "Downloading dot-0.3.0-py3-none-any.whl (3.1 kB)\n",
      "Installing collected packages: dot\n",
      "Successfully installed dot-0.3.0\n"
     ]
    }
   ],
   "source": [
    "a=!pip list\n",
    "for i in a:\n",
    "    if 'numpy' in i:\n",
    "        print(i)\n",
    "!pip install dot"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section1> </a>\n",
    "## 2.1 程序执行过程\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x2861be8d950>,\n",
       " <matplotlib.lines.Line2D at 0x2861be8da90>]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "x = np.linspace(0,6*np.pi,1000)\n",
    "plt.plot(x,2*np.sin(x*(np.pi/3)),x,np.cos(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "B\n"
     ]
    }
   ],
   "source": [
    "#输入成绩\n",
    "def Score(score=100):\n",
    "    outchar=''\n",
    "    if score >= 90:\n",
    "        outchar= 'A'\n",
    "    elif score >= 80:\n",
    "        outchar= 'B'\n",
    "    elif score >= 70:\n",
    "        outchar= 'C'\n",
    "    elif score >= 60:\n",
    "        outchar= 'D'\n",
    "    else:\n",
    "        outchar= 'F'\n",
    "    print(outchar)\n",
    "Score(85)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from graphviz import Digraph\n",
    "\n",
    "# 创建一个有向图\n",
    "dot = Digraph(comment='Score Flowchart',node_attr={'fontname': 'SimHei'}, edge_attr={'fontname': 'SimHei'})\n",
    "\n",
    "# 定义节点和边\n",
    "dot.node('start', '开始')\n",
    "dot.node('score', '输入分数')\n",
    "dot.node('A', 'A')\n",
    "dot.node('B', 'B')\n",
    "dot.node('C', 'C')\n",
    "dot.node('D', 'D')\n",
    "dot.node('F', 'F')\n",
    "dot.node('end', '结束')\n",
    "\n",
    "# 添加边\n",
    "dot.edges(['sA', 'sB', 'sC', 'sD', 'sF'])\n",
    "dot.edge('start', 'score')\n",
    "dot.edge('score', 'A', label='>= 90')\n",
    "dot.edge('score', 'B', label='>= 80')\n",
    "dot.edge('score', 'C', label='>= 70')\n",
    "dot.edge('score', 'D', label='>= 60')\n",
    "dot.edge('score', 'F', label='< 60')\n",
    "dot.edge('A', 'end')\n",
    "dot.edge('B', 'end')\n",
    "dot.edge('C', 'end')\n",
    "dot.edge('D', 'end')\n",
    "dot.edge('F', 'end')\n",
    "\n",
    "# 渲染并保存流程图\n",
    "dot.render('graph', format='png', view=True)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"graph.png\"  alt=\"流程图\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 程序设计语言：机器语言、汇编语言、高级语言\n",
    "## 编译和解释\n",
    "编译：fortran C C++ C#\n",
    "解释：basic JavaScript PHP \n",
    "Python？？？\n",
    "Python语言执行的几种方式：\n",
    "\n",
    "分析程序执行过程-IPO：  \n",
    "a. Input模块：  \n",
    "b. Process模块：  \n",
    "c. Output模块：  \n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section2> </a>\n",
    "## 2.2 程序实例\n",
    "\n",
    "<p><a href=\"https://yanghailin.blog.csdn.net/article/details/81126087?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link\">\n",
    "this is example of python</a></p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "24\n",
      "['123', '124', '132', '134', '142', '143', '213', '214', '231', '234', '241', '243', '312', '314', '321', '324', '341', '342', '412', '413', '421', '423', '431', '432']\n"
     ]
    }
   ],
   "source": [
    "\"\"\"\n",
    "Created on Thu Jul 19 19:51:08 2018\n",
    "有四个数字：1、2、3、4，能组成多少个互不相同且无重复数字的三位数？各是多少？\n",
    "@author: yhl\n",
    "\"\"\"\n",
    " \n",
    "L=[]\n",
    "a=[1,2,3,4]\n",
    " \n",
    "#for i in range(len(a)):\n",
    " \n",
    "for val_1 in a:   #   for(i=1;i<n;I++)\n",
    "    for val_2 in a:\n",
    "        for val_3 in a:\n",
    "            if(val_1 == val_2 or val_1 == val_3 or val_2 == val_3):\n",
    "                continue;\n",
    "            else:\n",
    "                L.append(str(val_1)+str(val_2)+str(val_3))\n",
    " \n",
    " \n",
    "print(len(L)) \n",
    "print (L)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 2 3 n= 1\n",
      "1 2 4 n= 2\n",
      "1 3 2 n= 3\n",
      "1 3 4 n= 4\n",
      "1 4 2 n= 5\n",
      "1 4 3 n= 6\n",
      "2 1 3 n= 7\n",
      "2 1 4 n= 8\n",
      "2 3 1 n= 9\n",
      "2 3 4 n= 10\n",
      "2 4 1 n= 11\n",
      "2 4 3 n= 12\n",
      "3 1 2 n= 13\n",
      "3 1 4 n= 14\n",
      "3 2 1 n= 15\n",
      "3 2 4 n= 16\n",
      "3 4 1 n= 17\n",
      "3 4 2 n= 18\n",
      "4 1 2 n= 19\n",
      "4 1 3 n= 20\n",
      "4 2 1 n= 21\n",
      "4 2 3 n= 22\n",
      "4 3 1 n= 23\n",
      "4 3 2 n= 24\n"
     ]
    }
   ],
   "source": [
    "n=0\n",
    "for i in range(1,5):\n",
    "    for j in range(1,5):\n",
    "        for k in range(1,5):\n",
    "            if( i != k ) and (i != j) and (j != k):\n",
    "                n=n+1\n",
    "                print (i,j,k,\"n=\",n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "profit= 3.4250000000000003\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "企业发放的奖金根据利润提成。\n",
    "利润(I)低于或等于10万元时，奖金可提10%；\n",
    "利润高于10万元，低于20万元时，低于10万元的部分\n",
    "按10%提成，高于10万元的部分，可提成7.5%；\n",
    "20万到40万之间时，高于20万元的部分，可提成5%；\n",
    "40万到60万之间时高于40万元的部分，可提成3%；\n",
    "60万到100万之间时，高于60万元的部分，可提成1.5%;\n",
    "高于100万元时,超过100万元的部分按1%提成。\n",
    "从键盘输入当月利润I，求应发放奖金总数？\n",
    "'''\n",
    " \n",
    "profit = 0\n",
    "I = int(input(\"please input: \"))\n",
    "if(I<=10):\n",
    "    profit = 0.1 * I\n",
    "elif(I <= 20):\n",
    "    profit = 10 *0.1 + (I - 10)*0.075\n",
    "elif(I <=40):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (I - 20)*0.05\n",
    "elif(I <= 60):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (I - 40)*0.03\n",
    "elif(I <= 100):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (I - 60)*0.015\n",
    "else : \n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (100 - 60)*0.015 + (I -100)*0.01\n",
    "    \n",
    "print (\"profit=\",profit)\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5000.0\n",
      "6000.0\n",
      "6000.0\n",
      "10000.0\n",
      "7500.0\n",
      "10000.0\n",
      "profit= 44500.0\n"
     ]
    }
   ],
   "source": [
    "i = int(input('净利润:'))\n",
    "arr = [1000000,600000,400000,200000,100000,0]\n",
    "rat = [0.01,0.015,0.03,0.05,0.075,0.1]\n",
    "r = 0\n",
    "for idx in range(0,6):\n",
    "    if i>arr[idx]:\n",
    "        r+=(i-arr[idx])*rat[idx]#r=r+nnn\n",
    "        print((i-arr[idx])*rat[idx])\n",
    "        i=arr[idx]\n",
    "print (\"profit=\",r)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 数字类型转换\n",
    "有时候，我们需要对数据内置的类型进行转换，数据类型的转换，你只需要将数据类型作为函数名即可。\n",
    "\n",
    "int(x) 将x转换为一个整数。\n",
    "\n",
    "float(x) 将x转换到一个浮点数。\n",
    "\n",
    "complex(x) 将x转换到一个复数，实数部分为 x，虚数部分为 0。\n",
    "\n",
    "complex(x, y) 将 x 和 y 转换到一个复数，实数部分为 x，虚数部分为 y。x 和 y 是数字表达式。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section3></a>\n",
    "## 2.3程序的基本结构\n",
    "结构化程序的三大基本结构：\n",
    "\n",
    "a.顺序结构  \n",
    "b.分支结构  \n",
    "c.循环结构  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section4></a>\n",
    "## 2.4顺序结构\n",
    "\n",
    "### 数学函数\n",
    "<table><tr>\n",
    "<th>函数</th><th>返回值 ( 描述 )</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-abs.html\" rel=\"noopener noreferrer\">abs(x)</a></td><td>返回数字的绝对值，如abs(-10) 返回 10</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-ceil.html\" rel=\"noopener noreferrer\">ceil(x) </a></td><td>返回数字的上入整数，如math.ceil(4.1) 返回 5</td></tr>\n",
    "<tr><td><p>cmp(x, y)</p></td>\n",
    "<td>如果 x &lt; y 返回 -1, 如果 x == y 返回 0, 如果 x &gt; y 返回 1。 <strong style=\"color:red\">Python 3 已废弃，使用 (x&gt;y)-(x&lt;y) 替换</strong>。 </td>\n",
    "</tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-exp.html\" rel=\"noopener noreferrer\">exp(x) </a></td><td>返回e的x次幂(e<sup>x</sup>),如math.exp(1) 返回2.718281828459045</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-fabs.html\" rel=\"noopener noreferrer\">fabs(x)</a></td><td>返回数字的绝对值，如math.fabs(-10) 返回10.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-floor.html\" rel=\"noopener noreferrer\">floor(x) </a></td><td>返回数字的下舍整数，如math.floor(4.9)返回 4</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log.html\" rel=\"noopener noreferrer\">log(x) </a></td><td>如math.log(math.e)返回1.0,math.log(100,10)返回2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log10.html\" rel=\"noopener noreferrer\">log10(x) </a></td><td>返回以10为基数的x的对数，如math.log10(100)返回 2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-max.html\" rel=\"noopener noreferrer\">max(x1, x2,...) </a></td><td>返回给定参数的最大值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-min.html\" rel=\"noopener noreferrer\">min(x1, x2,...) </a></td><td>返回给定参数的最小值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-modf.html\" rel=\"noopener noreferrer\">modf(x) </a></td><td>返回x的整数部分与小数部分，两部分的数值符号与x相同，整数部分以浮点型表示。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-pow.html\" rel=\"noopener noreferrer\">pow(x, y)</a></td><td> x**y 运算后的值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-round.html\" rel=\"noopener noreferrer\">round(x [,n])</a></td><td><p>返回浮点数 x 的四舍五入值，如给出 n 值，则代表舍入到小数点后的位数。</p>\n",
    "<p><strong>其实准确的说是保留值将保留到离上一位更近的一端。</strong></p>\n",
    "</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sqrt.html\" rel=\"noopener noreferrer\">sqrt(x) </a></td><td>返回数字x的平方根。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 随机数函数\n",
    "随机数可以用于数学，游戏，安全等领域中，还经常被嵌入到算法中，用以提高算法效率，并提高程序的安全性。\n",
    "\n",
    "Python包含以下常用随机数函数：\n",
    "\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-choice.html\" rel=\"noopener noreferrer\">choice(seq)</a></td><td>从序列的元素中随机挑选一个元素，比如random.choice(range(10))，从0到9中随机挑选一个整数。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-randrange.html\" rel=\"noopener noreferrer\">randrange ([start,] stop [,step]) </a></td><td>从指定范围内，按指定基数递增的集合中获取一个随机数，基数默认值为 1</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-random.html\" rel=\"noopener noreferrer\">random() </a></td><td> 随机生成下一个实数，它在[0,1)范围内。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-seed.html\" rel=\"noopener noreferrer\">seed([x]) </a></td><td>改变随机数生成器的种子seed。如果你不了解其原理，你不必特别去设定seed，Python会帮你选择seed。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-shuffle.html\" rel=\"noopener noreferrer\">shuffle(lst) </a></td><td>将序列的所有元素随机排序</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-uniform.html\" rel=\"noopener noreferrer\">uniform(x, y)</a></td><td>随机生成下一个实数，它在[x,y]范围内。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 三角函数\n",
    "Python包括以下三角函数：\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-acos.html\" rel=\"noopener noreferrer\">acos(x)</a></td><td>返回x的反余弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-asin.html\" rel=\"noopener noreferrer\">asin(x)</a></td><td>返回x的反正弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan.html\" rel=\"noopener noreferrer\">atan(x)</a></td><td>返回x的反正切弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan2.html\" rel=\"noopener noreferrer\">atan2(y, x)</a></td><td>返回给定的 X 及 Y 坐标值的反正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-cos.html\" rel=\"noopener noreferrer\">cos(x)</a></td><td>返回x的弧度的余弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-hypot.html\" rel=\"noopener noreferrer\">hypot(x, y)</a></td><td>返回欧几里德范数 sqrt(x*x + y*y)。 </td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sin.html\" rel=\"noopener noreferrer\">sin(x)</a></td><td>返回的x弧度的正弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-tan.html\" rel=\"noopener noreferrer\">tan(x)</a></td><td>返回x弧度的正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-degrees.html\" rel=\"noopener noreferrer\">degrees(x)</a></td><td>将弧度转换为角度,如degrees(math.pi/2) ，  返回90.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-radians.html\" rel=\"noopener noreferrer\">radians(x)</a></td><td>将角度转换为弧度</td></tr>\n",
    "</table>\n",
    "\n",
    "### 数学常量\n",
    "\n",
    "<table><tr>\n",
    "<th>常量</th><th>描述</th></tr>\n",
    "<tr><td>pi</td><td>数学常量 pi（圆周率，一般以π来表示）</td></tr>\n",
    "<tr><td>e</td><td>数学常量 e，e即自然常数（自然常数）。</td></tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 安装Graphviz\n",
    "1.下载https://www.graphviz.org/download/   \n",
    "2.安装  \n",
    "3.设定环境变量path，增加C:\\Program Files\\windows_10_msbuild_Release_graphviz-7.0.1-win32\\Graphviz\\bin   \n",
    "4.pip install graphviz  \n",
    "5.import graphviz"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import graphviz\n",
    "dot=graphviz.Digraph(comment='the round table',name=\"顺序结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','Start')\n",
    "dot.node('2','input Radius =?',shape='parallelogram')\n",
    "dot.node('3','Print Radius')\n",
    "dot.node('4','Caculating Area')\n",
    "dot.node('5','Caculating perimeter')\n",
    "dot.node('6','print')\n",
    "dot.node('7','end')\n",
    "dot.edges(['12','23','34','45','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ridus= 15\n",
      "面积和周长: 706.8375000000001 94.245\n"
     ]
    }
   ],
   "source": [
    "''' \n",
    "计算圆周长\n",
    "'''\n",
    "Radius = eval(input(\"请输入圆半径:\"))\n",
    "print(\"Ridus=\",Radius)\n",
    "Area = 3.1415*Radius*Radius\n",
    "perimeter  = 2*3.1415*Radius \n",
    "print(\"面积和周长:\",Area,perimeter)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section4></a>\n",
    "## 2.5分支结构\n",
    "### 2.5.1 Python比较运算符\n",
    "\n",
    "以下假设变量a为10，变量b为20：\n",
    "<table><tr>\n",
    "<th width=\"10%\">运算符</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>==</td><td> 等于 - 比较对象是否相等</td><td> (a == b) 返回 False。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>!=</td><td> 不等于 - 比较两个对象是否不相等</td><td> (a != b) 返回 True。 </td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>&gt;</td><td> 大于 - 返回x是否大于y</td><td> (a &gt; b) 返回 False。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;</td><td> 小于 - 返回x是否小于y。所有比较运算符返回1表示真，返回0表示假。这分别与特殊的变量True和False等价。注意，这些变量名的大写。</td><td> (a &lt; b) 返回 True。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&gt;=</td><td> 大于等于 - 返回x是否大于等于y。</td><td> (a &gt;= b) 返回 False。</td>\n",
    "\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;=</td><td> 小于等于 - 返回x是否小于等于y。</td><td> (a &lt;= b) 返回 True。 </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "### 2.5.2 Python逻辑运算符        \n",
    "Python语言支持逻辑运算符，以下假设变量 a 为 10, b为 20:\n",
    "<table><tr>\n",
    "<th>运算符</th><th>逻辑表达式</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>and</td><td>x and y</td><td> 布尔\"与\" - 如果 x 为 False，x and y 返回 x 的值，否则返回 y 的计算值。  </td><td> (a and b) 返回 20。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>or</td><td>x or y</td><td>布尔\"或\" - 如果 x 是 True，它返回 x 的值，否则它返回 y 的计算值。</td><td> (a or b) 返回 10。</td>\n",
    "</tr>\n",
    "<tr><td>not</td><td>not x</td><td>布尔\"非\" - 如果 x 为 True，返回 False 。如果 x 为 False，它返回 True。</td><td> not(a and b) 返回 False </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.5.3 条件控制语句\n",
    "Python 条件语句是通过一条或多条语句的执行结果（True 或者 False）来决定执行的代码块。\n",
    "\n",
    "可以通过下图来简单了解条件语句的执行过程:\n",
    "\n",
    "<img src=\".//img//if-condition.jpg\" width=\"250\"></img>\n",
    "\n",
    "<img src=\".//img//python-if.webp\" width=\"150\"></img>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 求绝对值。\n",
    "\n",
    "输入：x\n",
    "$$\n",
    "\\begin{align}\n",
    "&&\\left|y\\right |= \\left\\{\\begin{matrix}\n",
    "x & if \\: x\\geq 0\\\\-x& if \\:x< 0\n",
    "\\end{matrix}\\right.{\\color{Red} }\n",
    "\\end{align}\n",
    "$$\n",
    "输出：y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'graphviz' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32mc:\\VSWork\\Pythonwork\\0001\\第二_课程序设计基础.ipynb Cell 19\u001b[0m in \u001b[0;36m<cell line: 1>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=0'>1</a>\u001b[0m dot\u001b[39m=\u001b[39mgraphviz\u001b[39m.\u001b[39mDigraph(comment\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mthe round table\u001b[39m\u001b[39m'\u001b[39m,name\u001b[39m=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m分支结构\u001b[39m\u001b[39m\"\u001b[39m,node_attr\u001b[39m=\u001b[39m{\u001b[39m'\u001b[39m\u001b[39mshape\u001b[39m\u001b[39m'\u001b[39m: \u001b[39m'\u001b[39m\u001b[39mbox\u001b[39m\u001b[39m'\u001b[39m})\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=1'>2</a>\u001b[0m dot\u001b[39m.\u001b[39mnode(\u001b[39m'\u001b[39m\u001b[39m1\u001b[39m\u001b[39m'\u001b[39m,\u001b[39m'\u001b[39m\u001b[39m开始\u001b[39m\u001b[39m'\u001b[39m)\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=2'>3</a>\u001b[0m dot\u001b[39m.\u001b[39mnode(\u001b[39m'\u001b[39m\u001b[39m2\u001b[39m\u001b[39m'\u001b[39m,\u001b[39m'\u001b[39m\u001b[39m输入Real Number =?\u001b[39m\u001b[39m'\u001b[39m,shape\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mparallelogram\u001b[39m\u001b[39m'\u001b[39m)\n",
      "\u001b[1;31mNameError\u001b[0m: name 'graphviz' is not defined"
     ]
    }
   ],
   "source": [
    "dot=graphviz.Digraph(comment='the round table',name=\"分支结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','开始')\n",
    "dot.node('2','输入Real Number =?',shape='parallelogram')\n",
    "dot.node('3','判断RealNumber是否大于0？',shape='diamond')\n",
    "dot.node('4','RealNumber=RealNumber')\n",
    "dot.node('5','RealNumber=-RealNumber')\n",
    "dot.node('6','输出绝对值',shape='parallelogram')\n",
    "dot.node('7','结束')\n",
    "dot.edges(['12','23','34','35','46','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Real Number 3\n",
      "绝对值: 3\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "求绝对值。\n",
    "'''\n",
    "RealNumber = eval(input(\"输入实数:\"))\n",
    "\n",
    "if (RealNumber < 0):\n",
    "    RealNumber = -RealNumber\n",
    "print(\"绝对值:\",RealNumber)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section6></a>\n",
    "## 2.6循环结构\n",
    "\n",
    "循环结构：\n",
    "\n",
    "while语句\n",
    "\n",
    "for语句\n",
    "\n",
    "循环分类：  \n",
    "当型循环  \n",
    "直到型循环  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "char1 =\"a\"\n",
    "char2=\"b\"\n",
    "char3=\"c\"\n",
    "char=char1+char2+char3\n",
    "boor1=(char[2]==char3)\n",
    "print(boor1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 整数累加：  \n",
    "输入：正整数R    \n",
    "处理：  \n",
    "S=1+2+3+…+R  \n",
    "<img src=\"./img/int_add.png\" width=\"150\">  \n",
    "输出：输出S"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "累加求和 55\n"
     ]
    }
   ],
   "source": [
    "R = eval(input(\"请输入正整数:\"))\n",
    "i, S = 0, 0\n",
    "while (i<=R):\n",
    "    S = S + i\n",
    "    i = i + 1\n",
    "print(\"累加求和\",S)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 提供了 for 循环和 while 循环（在 Python 中没有 do..while 循环）:\n",
    "\n",
    "<table><tr><th style=\"width:30%\">循环类型</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-while-loop.html\" title=\"Python WHILE 循环\">while 循环</a></td><td>在给定的判断条件为 true 时执行循环体，否则退出循环体。</td></tr>\n",
    "<tr><td><a href=\"/python/python-for-loop.html\" title=\" Python FOR 循环\">for 循环</a></td><td>重复执行语句</td></tr>\n",
    "<tr><td><a href=\"/python/python-nested-loops.html\" title=\"Python 循环全套\">嵌套循环</a></td><td>你可以在while循环体中嵌套for循环</td></tr>\n",
    "</table>\n",
    "\n",
    "### 循环控制语句\n",
    "循环控制语句可以更改语句执行的顺序。Python支持以下循环控制语句：\n",
    "<table><tr><th style=\"width:30%\">控制语句</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-break-statement.html\" title=\"Python break 语句\">break 语句</a></td><td>在语句块执行过程中终止循环，并且跳出整个循环</td></tr>\n",
    "<tr><td><a href=\"/python/python-continue-statement.html\" title=\"Python  语句\">continue 语句</a></td><td>在语句块执行过程中终止当前循环，跳出该次循环，执行下一次循环。</td></tr>\n",
    "<tr><td><a href=\"/python/python-pass-statement.html\" title=\"Python pass 语句\">pass 语句</a></td><td>pass是空语句，是为了保持程序结构的完整性。</td></tr>\n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 绘制数字图画\n",
    "   <img src=\"img.jpeg\" width=\"150 \" >"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                                                                              \n",
      "                                                                                                              \n",
      "                                        .                  8@$$$1                                             \n",
      "                                      i$$@$$$ .        .;$$%^^}$$$                                            \n",
      "                                     .$$\"`,$$$B.       B$$+^`^\"8$$.                                           \n",
      "                                     v$B,^\"`$$$@.     .$$J\"^`l>J$$.                                           \n",
      "                                     $$$>,\"\"^@$$Y     $$@`^^i>>h$$.                                           \n",
      "                                     $$%<>,^\"^$$$.   %$$,^^;>>>W$$                                            \n",
      "                                     $$@>>>\"\"^$$$@` .$$$^`\"i<><8$$.                                           \n",
      "                                     x$$>>>>\"^^@$$I )$$.^^:>>>>$$$                                            \n",
      "                                      $$>>><\"^^;$$@ $$$^^^>>>>i$$Q                                            \n",
      "                                      @${>>><^^^@$$(@$B^^\"<>>>!$@.                             .              \n",
      "                                       $$>>>>,\"^\"$$$$$@\"^,>>>>@$$                            $$B@8            \n",
      "                                       @$!>>>i\"\"^%$$$$B\"^;>>>i$$@.                          Q$\"^b$$$$^.       \n",
      "                                       .$@><>>l\"\"`$$$$@^^!>>>0$$'                           BB^`&$$`B$v       \n",
      "                                        .$$>>>>\"\"^Y$$$$`^!>>iB$$                          @$$^^^^^^,$$^       \n",
      "                                         d$%<i>:\"^^@$$$`^,i>@$B.   ...`.'   .            ,B0^^^^^^^$$B        \n",
      "                                      . `$$$$>>\"^\"$$$$$@%`^^&,`^^^ <w%@$$@@$$$$$$X.'    .$$\"^^^^^^^:%$@       \n",
      "                                 `'YB$$B$.\",t:^^^^^^^^^^^^^^^^^^^^^'\"\"^`^^^^^^^^0$$$$%.''$$q^^^^^^^\"B$$       \n",
      "                               $$$$$]\"^^^^^^^^^^^^^^^^^^^^^^^^^^^B$@$B$$$@$`\"^^^^^^\"$$$$@$^^^^^\"\",IB$$.       \n",
      "                          . @$$B\"^^^^,$$$$$$b\"^^\"^^^^^^^^^^^^^^^`.^^^^^^^`O$@$$.\"^^^^^`%$$$o;^^^\"$$@          \n",
      "                        '$$$$.\"\"^^`$@8Q^`^^^^^^^^^\"^^^^^^^^^^^\"^^^^^^^^^^^^^'I$$$j;^^^^^`,&$$8^^`@@1          \n",
      "                       $$$n\"^\"^^:B$B'^^^^^^^^^\"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^`$$$L^^^^^^^~B$$$m$B.          \n",
      "      .             '@$$@\"^^\"\"^!$B:^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^OB$8^^^^^^^,%$$$$            \n",
      "                   .@$@\"^^^^\"^&$$^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^.$$B^^^^^^^^a$$@.           \n",
      "                   $$$^^^^^\"\".@$^^^^^^^^^^^^^^^^^^^\"^^\"^^\"^^\"\"^^^^^^^^\"^^^^^^^^^^^^)$$^^^^\"^^^^8$$@'          \n",
      "                 m$$@^^^\"^^\"\"@$^^^^^^^^^\"\"^^^^^^^^^^^^^^^\"^^^^^^^^^^^^^^^^\"^^^^^^^^^@`^^^^\"^^^^^$$$B          \n",
      "                J$$$^^^^^\"^\"^$$\"^^^^^^\"^^^^^\"\"^^^^^^^^^^\"^^^^^^^^^^^^^^^^^^^\"^^^^^^^^^^^^^^^^^^^?$$$`.        \n",
      "               .@$$\"^^^^\"^^^^$$^^^^^\"^^^^^^^^^^^^^^^^^^^^\"\"^^^^\"^$$$$$$$`^^^^^^^^^^^^^^^^^^^^^^^^@$$$         \n",
      "               $$$,^^^^\"\"^^\"^^%\"^^^^^^^^^`I8$$@B`^^^^^^^\"^\"^^^^^$$$@  '$$k\"^^^^^^^^^^^\"^^^^^^^^^\"8$$$'        \n",
      "              '$$$\"^`^^^^^^^^^^\"^^^\"^^^\"_$B ..$$@`^^^^`^^^^^^^^^]$$$$$$$$$^^^^^\":llI:\"^^^^^\"^^^^^~$$$'        \n",
      "              $$$<^^^^^^^^^\"^^^^^^^\"^^^^$$$$@@$$$^^^^^^\"\"\"^^^^^^^^&$$$$@$\"^^~!>><$%<i!>>l\"^^^^^\"\";$$$'        \n",
      "              $$$\"^^^^^\"^^^^^^^^^^^^^^\"^`$$$r1$$$`^^^^^^^^^^^^^^^^^^^^^^^^:>@$+>B@>!$Q<B*>\"^^^^^^>$$$.        \n",
      "              $$$.^^^^^^^^^:i>>~i>>>>>I\"^`'.`.`^^^^^^^^^^^^^^^^^^^^^^^^^^^i$$<<t@><XB<>><>^^^^^^^$$$$.        \n",
      "              W$$$^^^^^^^\"i@q>>@@i:$$>d$'^^^^^^^^^\"^BB^^^$$$'B$m^^^^\"\"\"^^^^i>>>>>>>>>>><!\"^^\"^^^^$$$$.        \n",
      "               $$@\"`^^\"\"^>BB>>[@!>$@<>>!;^^^^^^^^^^`:$$$@$$$$$@,^^^^^^\"^^^^^\"i>>>>>>>l,\"^^^^^^^^B$$$'         \n",
      "               B$$+`^^^^^l>>>>>>>>>>>>>l^^^^^^^^^^^^^^,$$}B$@&$b\"^^^^^^^\"\"^^^^^^^^^^^^^^^^^^^^^'$$$%          \n",
      "               u$$$,^^^^^^^<<>>>>>i!:\"^^^^^^^^^^^^^^^^^o$$<k><$$^\"^^^^^^^^^^^^^^^^^^^^^^^^^^^^.$$$B.          \n",
      "                C$$@,^^^&$B8$$\">$$B$@^^^^^^^^^^^^^^^^^^^%$$<>l@$\"^^^^^^^^^^^^^^^^^^^^^^^\"\"\"^^,$$$$            \n",
      "                  @$$j^^$@.^^@$$%^`,$$`^^^^^^^^^^^^^^^^^^$$$?$@,^^^^^^^^^^^^^^^^^^^^^^^^^^\"\"\"$$$@.            \n",
      "                   $$$@\"$@`^^<$@\"\"^`@$\"^^^^^^^^^^^^^^\"^^^^`[1:\"^^^^^^^^^^^^^^^^^^^^^\"^^^^^^:$$$@.             \n",
      "                    '$$$$$Z^^:$B^^^$@I^^^^^^^^^\"^^^^^\"^^^^^.^^'BB^^^^^^^^^^^^^^^\"^^^^^`^^^f$$@'               \n",
      "                       .$$$%^^^^\"`%$\"&$$`^^^^^^^^^^^^^\"^^^^$$$$B^^^^^^^^^^^^^^\"^^^^^^^^,$$$$%                 \n",
      "                      .$$~^,\"^^:h$,^^^`$$ ^^^^^^^^^\"^^^^^^^^^^^^^^^^^^^^\"^^^^^^^^^^^^lB@I\".$@                 \n",
      "                      $$@\"^^\"^]$@,^\"^^^$$'^^^^^^^^^^^^^\"\"^^^^^^^^^^^^^^^^^^^^\"^^^^^^^^^^^^.$$                 \n",
      "                      .$$.^\"\"^^^^^^^^^$$$^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\"^^^^^^^^^^^^^\"\"\"\"^^m$f                 \n",
      "                       .@@%\"^^^^^^^\"%@B`^^^^^^\"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\"^^^^^^^^^^^$$.                 \n",
      "                          B@'^^^^^^^^^^^^^^^^^\"^^^^^^^^\"\"\"^^\"^^\"^^^^^^^^^^^^^^\"\"^^^^^^^^^:$o                  \n",
      "                          .|B@$$@^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^..                   \n",
      "                                                                           ..     .                           \n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<>:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "<>:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "C:\\Users\\DongJ\\AppData\\Local\\Temp\\ipykernel_21216\\1117848965.py:7: SyntaxWarning: invalid escape sequence '\\|'\n",
      "  \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "show_heigth = 50\n",
    "show_width = 110\n",
    "#这两个数字是调出来的\n",
    "\n",
    "ascii_char = list(\n",
    "    \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n",
    "#生成一个ascii字符列表\n",
    "char_len = len(ascii_char)\n",
    "\n",
    "pic = plt.imread(\"img.jpeg\")\n",
    "#使用plt.imread方法来读取图像，对于彩图，返回size = heigth*width*3的图像\n",
    "#matplotlib 中色彩排列是R G B\n",
    "#opencv的cv2中色彩排列是B G R\n",
    "\n",
    "pic_heigth, pic_width, _ = pic.shape\n",
    "#获取图像的高、宽\n",
    "\n",
    "gray = 0.2126 * pic[:, :, 0] + 0.7152 * pic[:, :, 1] + 0.0722 * pic[:, :, 2]\n",
    "#RGB转灰度图的公式 gray = 0.2126 * r + 0.7152 * g + 0.0722 * b\n",
    "\n",
    "#思路就是根据灰度值，映射到相应的ascii_char\n",
    "for i in range(show_heigth):\n",
    "    #根据比例映射到对应的像素\n",
    "    y = int(i * pic_heigth / show_heigth)\n",
    "    text = \"\"\n",
    "    for j in range(show_width):\n",
    "        x = int(j * pic_width / show_width)\n",
    "        text += ascii_char[int(gray[y][x] / 256 * char_len)]\n",
    "    print(text)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ! pip install -i http源\n",
    "新版ubuntu要求使用https源，要注意。\n",
    "\n",
    "清华：https://pypi.tuna.tsinghua.edu.cn/simple\n",
    "\n",
    "阿里云：https://mirrors.aliyun.com/pypi/simple/\n",
    "\n",
    "中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/\n",
    "\n",
    "华中理工大学：https://pypi.hustunique.com/\n",
    "\n",
    "山东理工大学：https://pypi.sdutlinux.org/ \n",
    "\n",
    "豆瓣：https://pypi.douban.com/simple/\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".venv",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.0"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
